var _ = require("lodash");
// _.pick(object, [props])
// 也是返回一个新的对象，只不过它需要的是props中给定的值
// 这可以用来复制form表单中固定的数据来做请求参数，比如业务受理中
// form中有几百个参数，选取其中的几十个，就可以用这个方法
var object = { a: 1, b: "2", c: 3 };

let a = _.pick(object, ["a", "c"]);
// console.log(a);

// _.pickBy(object, [predicate=_.identity])
// 创建一个新对象，值是断言为真的对象的所有属性
let b = _.pickBy(object, _.isNumber);
// console.log(b);

let obj = {
  a: 1,
  b: "",
  c: null,
  d: "Data",
  e: 0,
  f: ["1", "2"],
  g: [],
  h: [],
  i: undefined,
};

let list = ["b", "c", "d", "e", "f", "g", "h", "i"];

function isKeyAndNonEmpty(value, key) {
  // value.lenght>0 会排除掉0 ，因为0的长度是没有的
  // (!Array.isArray(value) || value.length > 0) 可以优化这个判断
  // 这个结果表示的就是如果value不是数组或者value是数组并且长度大于0，返回TRUE
  // 否则，如果value是空数组，返回FALSE
  return (
    list.includes(key) &&
    value != null &&
    value !== "" &&
    value !== undefined &&
    (!Array.isArray(value) || value.length > 0)
  );
}

let c = _.pickBy(obj, isKeyAndNonEmpty);
console.log(c);

let obj2 = {
  a: 1,
  b: 0,
  c: null,
  d: "Data",
  e: 0,
};

const keysToPick = ["a", "b", "d", "e"];

// 定义一个函数来检查属性是否在列表中，并且不为null或undefined
function isKeyValidAndNotEmpty(value, key) {
  // 检查键是否在给定的列表中，并且值不是null或undefined
  return keysToPick.includes(key) && value != null;
}

// 使用 _.pickBy 获取给定的非空属性（同时保留0值）
let newObj = _.pickBy(obj, isKeyValidAndNotEmpty);
console.log(newObj);
